Search K
Appearance
Appearance

Tab 键补全;注意
Shell 与 Bash 是包含与被包含的关系。举例来说,在社会中有翻译官这个职业,它是由许多从业者共同组成的职业名称,而 Bash 则是其中一个出色的成员,是 Shell 终端程序中的一份子。
要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根据实际情况来灵活调整各种命令的参数。
命令名称 [命令参数] [命令对象]-- 与 - 作为前缀。| 格式 | 示例 |
|---|---|
| 长格式 | man --help |
| 短格式 | man -h |
注意
-)即可。
注意
[root@linuxprobe~]# 这部分内容是终端提示符,它用于向用户展示一些基本的信息。 root;linuxprobe;~(这里的 ~ 是指用户家目录,第 6 章会讲解),# 表示管理员身份(如果是 $ 则表示普通用户,相应的权限也会小一些)。man 命令中常用按键以及作用:
| 按键 | 作用 |
|---|---|
空格键 | 向下翻一页 |
PaGe down | 向下翻一页 |
PaGe up | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如 /linux |
? | 从下至上搜索某个关键词,如 ?linux |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
| q | 退出帮助文档 |
man 命令中帮助信息的结构以及意义:
| 结构名称 | 代表意义 |
|---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
Tab 键:在 Bash 解释器的快捷键中,Tab 键绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。不仅速度快,而且避免了手动输入有可能出错的问题。Ctrl+c 组合键:当同时按下键盘上的 Ctrl 和字母 c 的时候,意味着终止当前进程的运行。假如执行了一个错误命令,或者是执行某个命令后迟迟无法结束,这时就可以冷静地按下 Ctrl+c 组合键,命令行终端的控制权会立刻回到我们手中。Ctrl+d 组合键:当同时按下键盘上的 Ctrl 和字母 d 的时候,表示键盘输入结束。Ctrl+l 组合键:当同时按下键盘上的 Ctrl 和字母 l 的时候,会清空当前终端中已有的内容(相当于清屏操作)。Tip
Ctrl + C 组合键(生产环境中比较常用的一个组合键),这样将立即终止该命令的进程。& 符号,这样命令将进入系统后台来执行。echo 命令用于在终端设备上输出字符串或变量提取后的值,语法格式为 echo [字符串] [$ 变量]。$ echo LinuxProbe.com
LinuxProbe.com
$ echo $SHELL
/bin/bashdate 命令用于显示或设置系统的时间与日期,语法格式为 date [+ 指定的格式]。
用户只需在强大的 date 命令后输入以 + 号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照 年 - 月 - 日 的格式打包成 backup-2020-9-1.tar.gz,用户只需要看一眼文件名称就能大致了解到每个文件的备份时间了。
date 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
%S | 秒(00 ~ 59) |
%M | 分钟(00 ~ 59) |
%H | 小时(00 ~ 23) |
%I | 小时(00 ~ 12) |
%m | 月份(1~12) |
%p | 显示出 AM 或 PM |
%a | 缩写的工作日名称(例如:Sun) |
%A | 完整的工作日名称(例如:Sunday) |
%b | 缩写的月份名称(例如:Jan) |
%B | 完整的月份名称(例如:January) |
%q | 季度(1~4) |
%y | 简写年份(例如:20) |
%Y | 完整年份(例如:2020) |
%d | 本月中的第几天 |
%j | 今年中的第几天 |
%n | 换行符(相当于按下回车键) |
%t | 跳格(相当于按下 Tab 键) |
$ date
Sat Sep 5 09:13:45 CST 2020
$ date "+%Y-%m-%d %H:%M:%S" # 按照 “年 - 月 - 日 小时: 分钟: 秒” 的格式查看
2020-09-05 09:14:35
$ date -s "20201101 8:30:00" # 将系统的当前时间设置为 2020 年 11 月 1 日 8 点 30 分
Sun Nov 1 08:30:00 CST 2020
$ date "+%j" #查看今天是当年中的第几天
306timedatectl 命令用于设置系统的时间,英文全称为 time date control,语法格式为 timedatectl [参数]。
timedatectl 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
status | 显示状态信息 |
list-timezones | 列出已知时区 |
set-time | 设置系统时间 |
set-timezone | 设置生效时区 |
$ timedatectl status
Local time: Sun 2020-09-06 19:51:22 CST
Universal time: Sun 2020-09-06 11:51:22 UTC
RTC time: Sun 2020-09-06 19:51:21
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
$ timedatectl set-timezone Asia/Shanghai # 手动设置时区是上海(Asia/Shanghai)
$ timedatectl set-time 2021-05-18 # 手动修改系统日期
$ timedatectl set-time 9:30 # 手动修改时间
$ date
Tue May 18 09:30:01 CST 2021reboot 命令用于重启系统,输入该命令后按回车键执行即可。注意
由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好是以 root 管理员的身份来重启,普通用户在执行该命令时可能会被拒绝。
poweroff 命令用于关闭系统,输入该命令后按回车键执行即可。wget 命令用于在终端命令行中下载网络文件,英文全称为 "web get",语法格式为 wget [参数] 网址。
借助于 wget 命令,可以无须打开浏览器,直接在命令行界面中就能下载文件。
wget 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
$ wget https://www.linuxprobe.com/docs/LinuxProbe.pdf
--2020-09-28 19:24:39-- https://www.linuxprobe.com/docs/LinuxProbe.pdf
Resolving www.linuxprobe.com (www.linuxprobe.com)... 221.15.64.1
Connecting to www.linuxprobe.com (www.linuxprobe.com)|221.15.64.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17676281 (17M) [application/pdf]
Saving to: ‘LinuxProbe.pdf’
LinuxProbe.pdf 100%[===================>] 16.86M 15.9MB/s in 1.1s
2020-09-28 19:24:40 (15.9 MB/s) - ‘LinuxProbe.pdf’ saved [17676281/17676281]
$ wget -r -p https://www.linuxprobe.com # 使用 wget 命令递归下载 www.linuxprobe.com 网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为 www.linuxprobe.com 的目录中
--2020-09-28 19:26:12-- https://www.linuxprobe.com/
Resolving www.linuxprobe.com (www.linuxprobe.com)... 221.15.64.1
Connecting to www.linuxprobe.com (www.linuxprobe.com)|221.15.64.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘www.linuxprobe.com/index.html’
……………… 省略下载过程………………ps 命令用于查看系统中的进程状态,英文全称为 "processes",语法格式为 ps [参数]。
通常会将 ps 命令与第 3 章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的 PID 号码。
ps 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在 Linux 系统中有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止。
除了上面 5 种常见的进程状态,还有可能是高优先级(<)、低优先级(N)、被锁进内存(L)、包含子进程(s)以及多线程(l)这 5 种补充形式。
当执行 ps aux 命令后通常会看到如下表所示的进程状态。下表只是列举了部分输出值,而且正常的输出值中不包括中文注释。
| USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
|---|---|---|---|---|---|---|---|---|---|---|
| 进程的所有者 | 进程 ID 号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量 (单位是 KB) | 占用的固定内存量 (单位是 KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用 CPU 的时间 | 命令名称与参数 |
| root | 1 | 0.0 | 0.5 | 244740 | 10636 | ? | Ss | 07:54 | 0:02 | /usr/lib/systemd/ systemd --switched-root --system --deserialize 18 |
| root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:54 | 0:00 | [kthreadd] |
| root | 3 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | [rcu_gp] |
| root | 4 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | [rcu_par_gp] |
| root | 5 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | [kworker/0:0H-kbl |
| root | 6 | 0.0 | 0.0 | 0 | 0 | ? | I< | 07:54 | 0:00 | [mm_percpu_wq] |
| ……………… | 省略部分输出信息 | ……………… |
注意
-)即可。ps 命令可允许参数不加减号(-),因此可直接写成 ps aux 的样子。$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 179748 14048 ? Ss 04:25 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 04:25 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I<04:25 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I<04:25 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I<04:25 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I<04:25 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S 04:25 0:00 [ksoftirqd/0]
linuxpr+ 8553 0.0 0.2 24564 5032 pts/1 Ss 14:25 0:00 -bash
linuxpr+ 8563 0.0 0.2 45848 5324 ? Ss 14:25 0:00 /usr/libexec/openssh/sftp-server
root 8633 0.0 0.0 7280 724 ? S 14:27 0:00 sleep 60
linuxpr+ 8635 0.0 0.1 57820 4000 pts/1 R+ 14:28 0:00 ps auxpstree 命令用于以树状图的形式展示进程之间的关系,英文全称为 "process tree",输入该命令后按回车键执行即可。ps 命令后,产生的信息量太大又没有规律,很难让人再想看第二眼。如果想让进程以树状图的形式,有层次地展示出进程之间的关系,则可以使用 pstree 命令。$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─atd
├─auditd─┬─sedispatch
│ └─2*[{auditd}]
├─avahi-daemon───avahi-daemon
├─boltd───2*[{boltd}]
├─colord───2*[{colord}]
……………… 省略部分输出信息………………top 命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。ps/pstree 命令都是静态地查看系统状态,不能实时滚动最新数据,而 top 命令能够动态地查看系统状态,因此完全可以将它看作是 Linux 中 "强化版的 Windows 任务管理器" 。top 是相当好用的性能分析工具。top 命令执行结果的前 5 行为系统整体的统计信息: $ top
top - 14:29:47 up 10:04, 2 users, load average: 0.00, 0.04, 0.05
Tasks: 319 total, 2 running, 317 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
MiB Mem : 1960.0 total, 131.4 free, 1355.5 used, 473.2 buff/cache
MiB Swap: 2048.0 total, 2030.4 free, 17.6 used. 423.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
992 root 20 0 309504 29824 9864 S 0.3 1.5 1:50.37 vmtoolsd
2116 root 20 0 204924 32088 10164 S 0.3 1.6 0:54.69 sssd_kcm
2338 linuxpr+ 20 0 531720 34540 27668 S 0.3 1.7 1:45.38 vmtoolsd
8547 linuxpr+ 20 0 161180 6200 4880 S 0.3 0.3 0:00.02 sshd
1 root 20 0 179748 14048 9184 S 0.0 0.7 0:03.40 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockdnice 命令用于调整进程的优先级,语法格式为 nice 优先级数字 服务名称。top 命令输出的结果中,PR 和 NI 值代表的是进程的优先级,数字越低(取值范围是 -20 ~ 19),优先级越高。在日常的生产工作中,可以将一些不重要进程的优先级调低,让紧迫的服务更多地利用 CPU 和内存资源,以达到合理分配系统资源的目的。$ nice -n -20 bash # 将 bash 服务的优先级调整到最高pidof 命令用于查询某个指定服务进程的 PID 号码值,语法格式为 pidof [参数] 服务名称。$ pidof sshd # 查询本机上 sshd 服务程序的 PID
2156kill 命令用于终止某个指定 PID 值的服务进程,语法格式为 kill [参数] 进程的 PID。-9,表示最高级别地强制杀死进程。$ pidof sshd
2156
$ kill 2156 # 强制停止 sshd 服务
$ kill -9 2156 # 最高级别地强制杀死进程killall 命令用于终止某个指定名称的服务所对应的全部进程,语法格式为 killall [参数] 服务名称。kill 命令逐个去结束这些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。$ pidof httpd # 查询 httpd 服务程序全部进程
5235 5233 5232 5231 5228
$ killall httpd # 结束 httpd 服务程序全部进程
$ pidof httpd
$作为一名合格的运维人员,要想更快、更好地了解 Linux 服务器,必须具备快速查看系统运行状态的能力,因此接下来会逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。
ifconfig 命令用于获取网卡配置与网络状态等信息,英文全称为 "interface config",语法格式为 ifconfig [参数] [网络设备]。ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址),以及 RX、TX 的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容)$ ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.131 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::20c:29ff:fe99:f4b2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:99:f4:b2 txqueuelen 1000 (Ethernet)
RX packets 5442 bytes 547667 (534.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9391 bytes 1781707 (1.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 72 bytes 6120 (5.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72 bytes 6120 (5.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:d4:b1:9d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0uname 命令用于查看系统内核版本与系统架构等信息,英文全称为 "unix name",语法格式为 uname [-a]。uname 命令时,一般要固定搭配上 -a 参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。redhat-release 文件。$ uname -a
Linux linuxprobe.com 4.18.0-193.el8.x86_64 #1 SMP Fri Mar 27 14:35:58 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)uptime 命令用于查看系统的负载信息,输入该命令后按回车键执行即可。uptime 命令可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面加粗的信息部分),负载值越低越好。$ uptime
14:31:55 up 10:06, 2 users, load average: 0.00, 0.02, 0.03free 命令用于显示当前系统中内存的使用量信息,语法格式为 free [-h]。
为了保证 Linux 系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。
在使用 free 命令时,可以结合使用 -h 参数以更人性化的方式输出当前内存的实时使用量信息。如果不使用 -h(易读模式)查看内存使用量情况,则默认以 KB 为单位。这样一来,服务器如果有几百 GB 的内存,则换算下来就会是一大长串的数字,真不利于阅读。
执行 free -h 命令后的输出信息:
| 内存总量 | 已用量 | 空闲量 | 共享使用的内存量 | 磁盘缓存的内存量 | 缓存的内存量 | 可用量 | |
|---|---|---|---|---|---|---|---|
| total | used | free | shared | buffers | buff/cache | available | |
| Mem: | 1.9Gi | 1.4Gi | 99Mi | 20Mi | 450Mi | 348Mi | |
| Swap: | 2.0Gi | 80Mi | 1.9Gi |
$ free -h
total used free shared buff/cache available
Mem: 1.9Gi 1.3Gi 127Mi 21Mi 476Mi 422Mi
Swap: 2.0Gi 17Mi 2.0Giwho 命令用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。
who 命令快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息;如果有远程用户,还会显示出来访者的 IP 地址。
执行 who 命令的结果:
| 登陆的用户名 | 终端设备 | 登陆到系统的时间 |
|---|---|---|
| root | tty2 | 2020-07-24 06:26 (tty2) |
$ who
linuxprobe tty2 2023-06-04 04:26 (tty2)
linuxprobe pts/1 2023-06-04 14:25 (192.168.0.108)last 命令用于调取主机的被访记录,输入该命令后按回车键执行即可。$ last
linuxpro pts/1 192.168.0.108 Sun Jun 4 14:25 still logged in
linuxpro tty2 tty2 Sun Jun 4 04:26 still logged in
reboot system boot 4.18.0-193.el8.x Sun Jun 4 04:26 still running
linuxpro tty2 tty2 Sun Jun 4 04:18 - down (00:05)
reboot system boot 4.18.0-193.el8.x Sun Jun 4 04:18 - 04:24 (00:06)
linuxpro tty2 tty2 Sun Jun 4 03:26 - crash (00:51)
reboot system boot 4.18.0-193.el8.x Sun Jun 4 03:18 - 04:24 (01:06)
wtmp begins Sun Jun 4 03:18:13 2023ping 命令用于测试主机之间的网络连通性,语法格式为 ping [参数] 主机地址。
执行 ping 命令时,系统会使用 ICMP 向远端主机发出要求回应的信息,若连接远端主机的网络没有问题,远端主机会回应该信息。由此可见,ping 命令可用于判断远端主机是否在线并且网络是否正常。
ping 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-c | 总共发送次数 |
-l | 指定网卡名称 |
-i | 每次间隔时间(秒) |
-W | 最长等待时间(秒) |
$ ping 192.168.0.108 # 测试主机
PING 192.168.0.108 (192.168.0.108) 56(84) bytes of data.
64 bytes from 192.168.0.108: icmp_seq=1 ttl=64 time=0.404 ms
64 bytes from 192.168.0.108: icmp_seq=2 ttl=64 time=0.729 ms
64 bytes from 192.168.0.108: icmp_seq=3 ttl=64 time=1.08 ms
64 bytes from 192.168.0.108: icmp_seq=4 ttl=64 time=0.688 ms
64 bytes from 192.168.0.108: icmp_seq=5 ttl=64 time=0.730 ms
^C
--- 192.168.0.108 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 16ms
rtt min/avg/max/mdev = 0.404/0.726/1.080/0.215 ms
$ ping 192.168.0.40 # 测试一台不在线的主机
PING 192.168.0.40 (192.168.0.40) 56(84) bytes of data.
From 192.168.0.131 icmp_seq=1 Destination Host Unreachable
From 192.168.0.131 icmp_seq=2 Destination Host Unreachable
From 192.168.0.131 icmp_seq=3 Destination Host Unreachable
From 192.168.0.131 icmp_seq=4 Destination Host Unreachable
From 192.168.0.131 icmp_seq=5 Destination Host Unreachable
From 192.168.0.131 icmp_seq=6 Destination Host Unreachable
^C
--- 192.168.0.40 ping statistics ---
7 packets transmitted, 0 received, +6 errors, 100% packet loss, time 189ms
pipe 4tracepath 命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为 tracepath [参数] 域名。tracepath 命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题。$ tracepath www.linuxprobe.com
1?: [LOCALHOST] pmtu 1500
1: _gateway 2.458ms
1: _gateway 2.648ms
2: 192.168.1.1 3.286ms
3: 192.168.1.1 2.825ms pmtu 1480
3: 10.0.144.1 12.397ms
4: 123.139.1.41 5.313ms
5: 221.11.0.97 21.903ms asymm 8
6: 221.11.0.25 34.017ms asymm 8
……………… 省略部分输出信息………………netstat 命令用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为 "network status",语法格式为 netstat [参数]。
只要 netstat 命令使用得当,便可以查看到网络状态的方方面面信息。
netstat 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-a | 显示所有连接中的 Socket |
-p | 显示正在使用的 Socket 信息 |
-t | 显示 TCP 协议的连接状态 |
-u | 显示 UDP 协议的连接状态 |
-n | 使用 IP 地址,不使用域名 |
-l | 仅列出正在监听的服务状态 |
-i | 显示网卡列表信息 |
-r | 显示路由表信息 |
$ netstat -a # 显示详细的网络状况
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 linuxprobe.com:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
……………… 省略部分输出信息………………
$ netstat -i # 显示网卡列表
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens160 1500 5940 0 0 0 9778 0 0 0 BMRU
lo 65536 79 0 0 0 79 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMUhistory 命令用于显示执行过的命令历史,语法格式为 history [-c]。history 命令应该是运维人员最喜欢的命令。执行 history 命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录。如果觉得 1000 不够用,可以自定义 /etc/profile 文件中的 HISTSIZE 变量值。history 命令时,可以使用 -c 参数清空所有的命令历史记录。! 编码数字" 的方式来重复执行某一次的命令。.bash_history 文件中 (可以用 cat ~/.bash_history 命令查看其文件内容)。Linux 系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件。$ history
1 ifconfig
2 cat /etc/sysconfig/network-scripts/ifcfg-ens160
3 vi /etc/sysconfig/network-scripts/ifcfg-ens160
4 sudo vi /etc/sysconfig/network-scripts/ifcfg-ens160
5 su - root
6 uname -a
7 ps aux
8 pstree
9 top
10 clear
11 ifconfig
12 uname -a
13 cat /etc/redhat-release
14 uptime
15 clear
16 free -h
17 who
18 last
19 ping www.baidu.com
20 ping google.com
21 ping 192.168.0.108
22 ping 192.168.0.40
23 clear
24 tracepath www.linuxprobe.com
25 netstat -a
26 netstat -i
27 history
$ !17
who
linuxprobe tty2 2023-06-04 04:26 (tty2)
linuxprobe pts/1 2023-06-04 14:25 (192.168.0.108)
$ history -c # 清空所有的命令历史记录
$ history
1 historysosreport 命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。sosreport 命令有点像是远程问诊。假如我们今天有点咳嗽发烧不舒服,可以先从网上搜索相关症状的病因,如果仅仅是感冒的话那就多喝水,这就免去了到医院挂号看病的车马劳顿;而如果怀疑出了大毛病,再请专业人员进行处理也不迟。$ sosreport
sosreport (version 3.6)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.
An archive containing the collected information will be generated in
/var/tmp/sos.9_i0glu8 and may be provided to a Red Hat support
representative.
Any information provided to Red Hat will be treated in accordance with
the published support policies at:
https://access.redhat.com/support/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.
No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit.
此处按下回车键进行确认
Please enter the case id that you are generating this report for []: 此处按下回车键进行确认
Setting up archive ...
Setting up plugins ...
Running plugins. Please wait ...
……………… 省略部分输出信息………………
Finished running plugins
Creating compressed archive...
Your sosreport has been generated and saved in:
/var/tmp/sosreport-linuxprobe.com-2021-05-18-jnkaspu.tar.xz
The checksum is: 9fbecbd167b7e5836db1ff8f068c4db3
Please send this file to your support representative.工作目录指的是用户当前在系统中所处的位置。由于工作目录会牵涉系统存储结构相关的知识,因此第 6 章将详细讲解这部分内容。
pwd 命令用于显示用户当前所处的工作目录,英文全称为 "print working directory",输入该命令后按回车键执行即可。
$ pwd # 查看当前所处的工作目录
/etccd 命令用于切换当前的工作路径,英文全称为 "change directory",语法格式为 cd [参数] [目录]。cd 命令迅速、灵活地切换到不同的工作目录。cd - 命令返回到上一次所处的目录。cd .. 命令进入上级目录。cd ~ 命令切换到当前用户的家目录。cd ~username 命令切换到其他用户的家目录(就像在游戏中使用了 "回城" 技能一样)。$ cd /etc # 切换进 /etc 目录中
$ cd /bin # 切换到 /bin 目录
$ cd - # 返回到上一次的目录(即 /etc 目录)
$ cd ~ # 快速切换到用户的家目录ls 命令用于显示目录中的文件信息,英文全称为 "list",语法格式为 ls [参数] [文件名称]。
所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。
使用 ls 命令的 -a 参数可以看到全部文件(包括隐藏文件), 使用 -l 参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性信息。
命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-a | 显示所有文件及目录 |
-A | 不显示当前目录和父目录 |
-d | 显示目录自身的属性信息 |
-i | 显示文件的 inode 属性信息 |
-l | 显示文件的详细属性信息 |
-m | 以逗号为间隔符,水平显示文件信息 |
-r | 依据首字母将文件以相反次序显示 |
-R | 递归显示所有子文件 |
-S | 依据内容大小将文件排序显示 |
-t | 依据最后修改时间将文件排序显示 |
-X | 依据扩展名将文件排序显示 |
--color | 显示信息带有着色效果 |
$ ls -al
total 48
dr-xr-x---. 15 root root 4096 Jul 24 06:33 .
dr-xr-xr-x. 17 root root 224 Jul 21 05:04 ..
-rw-------. 1 root root 1407 Jul 21 05:09 anaconda-ks.cfg
-rw-------. 1 root root 335 Jul 24 06:33 .bash_history
-rw-r--r--. 1 root root 18 Aug 13 2018 .bash_logout
-rw-r--r--. 1 root root 176 Aug 13 2018 .bash_profile
-rw-r--r--. 1 root root 176 Aug 13 2018 .bashrc
-rw-------. 1 root root 3235 Jul 24 06:32 .viminfo
$ ls -ld /etc # 查看 /etc 目录的权限与属性信息
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etctree 命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。tree 命令的功能是用于以树状图形式列出目录内容,帮助运维人员快速了解到目录的层级关系。find 命令用于按照指定条件来查找文件所对应的位置,语法格式为 find [查找范围] 寻找条件。
本书中会多次提到 Linux 系统中的一切都是文件,接下来就要见证这句话的分量了。在 Linux 系统中,搜索工作一般都是通过 find 命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。
find 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode 为完全匹配,-mode 为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前) |
-atime -n +n | 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件 f1 新但比 f2 旧的文件 |
-type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而 -50KB 为查找小于 50KB 的文件) |
-prune | 忽略某个目录 |
-exec …… {}\; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
`-exec` 参数
-exec 参数用于把 find 命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第 3 章将要讲解的管道符技术,并且由于 find 命令对参数有特殊要求,因此虽然 exec 是长格式形式,但它的前面依然只需要一个减号(-)。{} 表示 find 命令搜索出的每一个文件,并且命令的结尾必须是 \;。$ find /etc -name "host*" -print # 获取该目录中所有以 host 开头的文件列表
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/avahi/hosts
/etc/hostname
$ find / -perm -4000 -print # 在整个系统中搜索权限中包括 SUID 权限的所有文件
/usr/bin/fusermount
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/mount
……………… 省略部分输出信息………………
$ find / -user linuxprobe -exec cp -a {} /root/findresults/ \; # 在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到 /root/findresults 目录中。locate 命令用于按照名称快速搜索文件所对应的位置,语法格式为 locate 文件名称"。find 命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试 locate 命令。locate 命令时,先使用 updatedb 命令生成一个索引库文件,这个库文件的名字是 /var/lib/mlocate/mlocate.db,后续在使用 locate 命令搜索文件时就是在该库中进行查找操作,速度会快很多。$ updatedb
$ ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2945917 Sep 13 17:54 /var/lib/mlocate/mlocate.db
$ locate whereis # 搜索出所有包含 “whereis” 名称的文件所在的位置
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gzwhereis 命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为 whereis 命令名称。whereis 命令也是基于 updatedb 命令所生成的索引库文件进行搜索,它与 locate 命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
$ whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gzwhich 命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为 which 命令名称。which 命令是在 PATH 变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个 which 命令就太合适了。$ which locate
/usr/bin/locate
$ which whereis
/usr/bin/whereis在 Linux 系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。如果不能熟练地查阅系统或服务的配置文件,那以后工作时可就真的要尴尬了。本节将讲解几条用于查看文本文件内容的命令。至于相对比较复杂的文本编辑器工具,将在第 4 章与 Shell 脚本一起讲解。
cat 命令用于查看纯文本文件(内容较少的),英文全称为 "concatenate",语法格式为 cat [参数] 文件名称。cat 命令就是用于查看内容较少的纯文本文件。cat 命令后面追加一个 -n 参数可以显示行号。$ cat -n .bashrc
1 # .bashrc
2
3 # Source global definitions
4 if [-f /etc/bashrc]; then
5 . /etc/bashrc
6 fi
7
8 # User specific environment
9 PATH="$HOME/.local/bin:$HOME/bin:$PATH"
10 export PATH
11
12 # Uncomment the following line if you don't like systemctl's auto-paging feature:
13 # export SYSTEMD_PAGER=
14
15 # User specific aliases and functionsmore 命令用于查看纯文本文件(内容较多的),语法格式为 more [参数] 文件名称。cat 可就真的不适合了。因为一旦使用 cat 命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用 more 命令来查看。more 命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页。$ more initial-setup-ks.cfg
#version=RHEL8
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# Use graphical install
--More--(20%)head 命令用于查看纯文本文件的前 N 行,语法格式为 head [参数] 文件名称。-n 参数设置显示行数。$ head -n 6 initial-setup-ks.cfg
#version=RHEL8
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# Use graphical installtail 命令用于查看纯文本文件的后 N 行或持续刷新文件的最新内容,语法格式为 tail [参数] 文件名称。head 命令一样,使用 -n 参数设置显示行数。tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件时,这特别有用,此时的命令格式为 tail -f 文件名称。$ tail -n 6 initial-setup-ks.cfg
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
$ tail -f /var/log/messages
Sep 15 00:14:06 localhost systemd[1]: Starting SSSD Kerberos Cache Manager...
Sep 15 00:14:06 localhost systemd[1]: Started SSSD Kerberos Cache Manager.
Sep 15 00:14:06 localhost sssd[kcm][3989]: Starting up
Sep 15 00:14:26 localhost NetworkManager[1203]: <info> [1600100066.4675] audit: op="sleep-control" arg="off" pid=3990 uid=0 result="fail" reason="Already awake"
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: last_user_time (2361102) is greater than comparison timestamp (2361091). This most likely represents a buggy client sending inaccurate timestamps in messages such as _NET_ACTIVE_WINDOW. Trying to work around...
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: W14 (root@local) appears to be one of the offending windows with a timestamp of 2361102. Working around...tr 命令用于替换文本内容中的字符,英文全称为 "transform",语法格式为 tr [原始字符] [目标字符]。
在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用 cat 命令读取待处理的文本,然后通过管道符(详见第 3 章)把这些文本内容传递给 tr 命令进行替换操作即可。
tr 命令常用参数及作用:
| 参数 | 作用 |
|---|---|
-c | 反选原始字符的补集 |
-d | 删除原始字符中出现的所有字符 |
-s | 删除所有重复出现的字符序列 |
-t | 将原始字符截断为目标字符] 的长度 |
$ tr [a-z] [A-Z] < File.cfg # cat File.cfg | tr [a-z] [A-Z] # 将指定文件中的小写字母转换成大写字母后输出内容到终端界面
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
……………… 省略部分输出信息………………
$ tr -d [0-9] < File.cfg # 删除指定文件中所有的数字后输出内容到终端界面
#version=RHEL
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Use graphical install
……………… 省略部分输出信息………………
$ tr -s "[\n]" < File.cfg # 将指定文件中的多个相邻空行去重后输出内容到终端界面
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Use graphical install
……………… 省略部分输出信息………………wc 命令用于统计指定文本文件的行数、字数或字节数,英文全称为 "word counts",语法格式为 wc [参数] 文件名称。
wc 的参数以及相应的作用:
| 参数 | 作用 |
|---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
$ wc -l /etc/passwd
45 /etc/passwdINFO
在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用 wc -l /etc/passwd 命令来进行查询。
stat 命令用于查看文件的具体存储细节和时间等信息,英文全称为 "status",语法格式为 stat 文件名称。$ stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1407 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35321091 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-07-21 05:16:52.347279499 +0800
Modify: 2020-07-21 05:09:16.421009316 +0800
Change: 2020-07-21 05:09:16.421009316 +0800
Birth: -grep 命令用于按行提取文本内容,语法格式为 grep [参数] 文件名称。
grep 命令是用途最广泛的文本搜索匹配工具。它虽然有很多参数,但是大多数基本上都用不到。有鉴于此,我们在这里只讲 grep 命令两个最常用的参数:
-n 参数用来显示搜索到的信息的行号;-v 参数用于反选信息(即没有包含关键词的所有信息行)。grep 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-b | 将可执行文件 (binary) 当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有 "关键词" 的行。 |
# 在 Linux 系统中,/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设置成 /sbin/nologin,则不再允许登录系统,
# 因此可以使用 grep 命令查找出当前系统中不允许登录系统的所有用户的信息
$ grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologincut 命令用于按 "列" 提取文本内容,语法格式为 cut [参数] 文件名称。
cut 命令命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-b | 以字节为单位进行分割 |
-c | 以字符为单位进行分割 |
-d | 设置分隔符 |
-f | 显示指定字段的内容 |
-n | 取消分割多字节字符 |
$ cut -d : -f 1 /etc/passwd # 以冒号为间隔符,仅提取指定文件中第一列的内容
root
bin
daemon
adm
lp
sync
……………… 省略部分输出信息………………
$ cut -c 1-4 /etc/passwd # 提取指定文件中每行的前 4 个字符
root
bin:
daem
adm:
lp:x
sync
……………… 省略部分输出信息………………diff 命令用于比较多个文件之间内容的差异,英文全称为 "different",语法格式为 diff [参数] 文件名称 A 文件名称 B。diff 命令时,不仅可以使用 --brief 参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。# 先使用 cat 命令分别查看 diff_A.txt 和 diff_B.txt 文件的内容,然后进行比较
$ cat diff_A.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
$ cat diff_B.txt
Welcome tooo linuxprobe.com
Red Hat certified
Free Linux LeSSonS
////////.....////////
Professional guidance
Linux Course
# 使用 diff --brief 命令显示比较后的结果,判断文件是否相同
$ diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
# 使用带有 -c 参数的 diff 命令来描述文件内容具体的不同
$ diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2020-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2020-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! ////////.....////////
Professional guidance
Linux Courseuniq 命令用于去除文本中连续的重复行,英文全称为 "unique",语法格式为 uniq [参数] 文件名称。uniq 命令的英文全称 unique(独特的,唯一的)可知,该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复的,保留的都是唯一的,自然也就是 "独特的" "唯一的" 了。$ cat uniq.txt
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
$ uniq uniq.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Coursesort 命令用于对文本内容进行再排序,语法格式为 sort [参数] 文件名称。
有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用 sort 命令就再合适不过了,它能够对文本内容进行再次排序。
sort 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-f | 忽略大小写 |
-b | 忽略缩进与空格 |
-n | 以数值型排序 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定间隔符 |
-k | 设置字段范围 |
# 执行 sort 命令后默认会按照字母顺序进行排序
$ cat fruit.txt
banana
pear
apple
orange
raspaberry
$ sort fruit.txt
apple
banana
orange
pear
raspaberry
# 按照 user.txt 文件中的第 3 列进行数值排序,列之间使用 “:” 作为分隔符
$ cat user.txt
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
# -t 参数指定分隔符为 “:”,-k 参数指定按第几列排序(这里是第 3 列),-n 参数指定按照数值排序。
$ sort -t : -k 3 -n user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitdsort Vs uniq
与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用 -u 参数进行去重操作。
$ cat -n urls.txt
1 Welcome to linuxprobe.com
2 Red Hat certified
3 Welcome to linuxprobe.com
4 Free Linux Lessons
5 Linux Course%
$ sort -u urls.txt
Free Linux Lessons
Linux Course
Red Hat certified
Welcome to linuxprobe.com
$ uniq urls.txt
Welcome to linuxprobe.com
Red Hat certified
Welcome to linuxprobe.com
Free Linux Lessons
Linux Course有了上面的知识铺垫,我们将在本节介绍 Linux 系统日常运维工作中最常用的命令,实现对文件的创建、修改、复制、剪切、更名与删除等操作。
touch 命令用于创建空白文件或设置文件的时间,语法格式为 touch [参数] 文件名称。
在创建空白的文本文件方面,这个 touch 命令相当简洁,简捷到没有必要铺开去讲。比如,touch linuxprobe 命令可以创建出一个名为 linuxprobe 的空白文本文件。对 touch 命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(Mtime)、文件权限或属性的更改时间(Ctime)与文件的访问时间(Atime)上面。
touch 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-a | 仅修改 "读取时间" (atime) |
-m | 仅修改 "修改时间" (mtime) |
-d | 同时修改 atime 与 mtime |
# 先使用 ls 命令查看一个文件的修改时间,随后修改这个文件,最后再查看一下文件的修改时间,看是否发生了变化、
$ ls -l anaconda-ks.cfg
-rw-------. 1 root root 1213 May 4 15:44 anaconda-ks.cfg
$ echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
$ ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug 2 01:26 anaconda-ks.cfg
# 如果不想让别人知道我们修改了它,那么这时就可以用 touch 命令把修改后的文件时间设置成修改之前的时间
$ touch -d "2020-05-04 15:44" anaconda-ks.cfg
$ ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 May 4 15:44 anaconda-ks.cfgmkdir 命令用于创建空白的目录,英文全称为 "make directory",语法格式为 mkdir [参数] 目录名称。mkdir 命令还可以结合 -p 参数来递归创建出具有嵌套层叠关系的文件目录。$ mkdir linuxprobe
$ cd linuxprobe
$ mkdir -p a/b/c/d/e
$ cd a
$ cd b
$cp 命令用于复制文件或目录,英文全称为 "copy",语法格式为 cp [参数] 源文件名称 目标文件名称。
在 Linux 系统中,复制操作具体分为 3 种情况:
复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上 -r 参数。
cp 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-p | 保留原始文件的属性 |
-d | 若对象为 "链接文件",则保留该 "链接文件" 的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于 - pdr(p、d、r 为上述参数) |
# 使用 touch 命令创建一个名为 install.log 的普通空白文件,然后将其复制为一份名为 x.log 的备份文件,最后再使用 ls 命令查看目录中的文件
$ touch install.log
$ cp install.log x.log
$ ls
install.log x.logmv 命令用于剪切或重命名文件,英文全称为 "move",语法格式为 mv [参数] 源文件名称 目标文件名称。$ mv x.log linux.log
$ ls
install.log linux.logrm 命令用于删除文件或目录,英文全称为 "remove",语法格式为 rm [参数] 文件 名称。
在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上 -f 参数来强制删除。
要想删除一个目录,需要在 rm 命令后面加一个 -r 参数才可以,否则删除不掉。
rm 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-f | 强制执行 |
-i | 删除前询问 |
-r | 删除目录 |
-v | 显示过程 |
# 尝试删除前面创建的 install.log 和 linux.log 文件,大家感受一下加与不加 -f 参数的区别
[root@linuxprobe ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linuxprobe ~]# rm -f linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为 dd if=参数值 of=参数值 count=参数值 bs=参数值。
dd 命令是一个比较重要而且比较有特色的命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然,如果愿意的话,还可以在复制过程中转换其中的数据。
Linux 系统中有一个名为 /dev/zero 的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为 dd 命令的输入文件,来生成一个指定大小的文件。
dd 命令的功能也绝不仅限于复制文件这么简单。如果想把光驱设备中的光盘制作成 iso 格式的镜像文件,在 Windows 系统中需要借助于第三方软件才能做到,但在 Linux 系统中可以直接使用 dd 命令来压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像。dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-LinuxProbe.Com.iso
dd 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个 "块" 的大小 |
count | 设置要复制 "块" 的个数 |
# 用 dd 命令从 /dev/zero 设备文件中取出一个大小为 560MB 的数据块,然后保存成名为 560_file 的文件。
[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 1.28667 s, 456 MB/s
# 使用 dd 命令来压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像
[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-8.0-x86_64-LinuxProbe.Com.iso
13873152+0 records in
13873152+0 records out
7103053824 bytes (7.1 GB, 6.6 GiB) copied, 27.8812 s, 255 MB/sbs 块大小与 count 块个数的关系
file 命令用于查看文件的类型,语法格式为 file 文件名称。file 命令来查看文件类型了。[root@linuxprobe ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block specialINFO
cat 命令查看文本,执行 bash 命令执行脚本等,所以也就不需要强制让用户给文件设置后缀了。tar 命令用于对文件进行打包压缩或解压,语法格式为 tar 参数 文件名称。
在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件的体积小,在网速相同的情况下,体积越小则传输时间越短。
在 Linux 系统中,主要使用的是 .tar、.tar.gz 或 .tar.bz2 格式,大家不用担心格式太多而记不住,其实这些格式大部分都是由 tar 命令生成的。
tar 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用 Gzip 压缩或解压 |
-j | 用 bzip2 压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先,-c 参数用于创建压缩文件,-x 参数用于解压文件,因此这两个参数不能同时使用。
其次,-z 参数指定使用 gzip 格式来压缩或解压文件,-j 参数指定使用 bzip2 格式来压缩或解压文件。
在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用 -v 参数向用户不断显示压缩或解压的过程。
-C 参数用于指定要解压到哪个指定的目录。-f 参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。
一般使用 tar -czvf 压缩包名称.tar.gz 要打包的目录 命令把指定的文件进行打包压缩;相应的解压命令为 tar -xzvf 压缩包名称.tar.gz。
# 使用 tar 命令把 /etc 目录通过 gzip 格式进行打包压缩,并把文件命名为 etc.tar.gz
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
……………… 省略部分压缩过程信息………………
# 将打包后的压缩包文件指定解压到 /root/etc 目录中(先使用 mkdir 命令创建 /root/etc 目录):
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
……………… 省略部分解压过程信息………………[!question]- 在 RHEL 8 及众多的 Linux 系统中,最常使用的 Shell 终端是什么? Bash(Bourne-Again SHell)解释器。
[!question]- 执行 Linux 系统命令时,添加参数的目的是什么? 为了让 Linux 系统命令能够更贴合用户的实际需求进行工作。
[!question]- Linux 系统命令、命令参数及命令对象之间,应该使用什么来间隔? 应该使用一个或多个空格进行间隔。
[!question]- 请写出用
echo命令把SHELL变量值输出到屏幕终端的命令。echo $SHELL。
[!question]- 简述 Linux 系统中 5 种进程的名称及含义。 在 Linux 系统中,有下面 5 种进程名称。
- R(运行):进程正在运行或在运行队列中等待。
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
- D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
- Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用 wait4() 系统函数后将进程释放。
- T(停止):进程收到停止信号后停止运行。
[!question]- 请尝试使用 Linux 系统命令关闭 PID 为 5529 的服务进程。 执行
kill 5529命令即可;若知道服务的名称,则可以使用killall命令进行关闭。
[!question]- 使用
ifconfig命令查看网络状态信息时,需要重点查看的 4 项信息分别是什么? 这 4 项重要的信息分别是网卡名称、IP 地址、网卡物理地址以及 RX/TX 的收发流量数据大小。
[!question]- 使用
uptime命令查看系统负载时,对应的负载数值如果是 0.91、0.56、0.32,那么最近 15 分钟内负载压力最大的是哪个时间段? 通过负载数值可以看出,最近 1 分钟内的负载压力是最大的。
[!question]- 使用
history命令查看历史命令的执行记录时,命令前面的编码数字除了排序外还有什么用处? 还可以用! 编码数字" 的命令格式重复执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。
[!question]- 若想查看的文件具有较长的内容,那么使用
cat、more、head、tail中的哪个命令最合适? 文件内容较长,使用more命令;反之使用cat命令。
[!question]- 在使用
mkdir命令创建有嵌套关系的目录时,应该加上什么参数呢? 应该加上-p递归迭代参数,从而自动化地创建有嵌套关系的目录。
[!question]- 在使用
rm命令删除文件或目录时,可使用哪个参数来避免二次确认呢? 可使用-f参数,这样即可无须二次确认。
[!question]- 若有一个名为
backup.tar.gz的压缩包文件,那么解压的命令应该是什么? 应该用tar命令进行解压,执行tar -xzvf backup.tar.gz命令即可。
[!question]- 使用
grep命令对某个文件进行关键词搜索时,若想要进行文件内容反选,应使用什么参数? 可使用-v参数来进行匹配内容的反向选择,即显示出不包含某个关键词的行。